{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MSE: 6.6253\n"
     ]
    },
    {
     "data": {
      "image/png": "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RqJFUth7771Hjx49uPDCC+nTpw+fffYZo0ePJj8/n+7du3P99deXt+3fvz+FhYWUlJTQtGlTxo4dS69evfjBD37Al19+CcDVV19dnqj279+fsWPH0rdvX7p06cKrr74KwDfffMNpp51Gr169GDFiBPn5+eUJfpmioiLcnWbNmgFQr1698mT3iy++4NRTTyU/P5++ffsyf/583n//fSZNmsRf/vIX8vLyyt9rRwYNGsR5553HP//5TwBWrFjBkCFDOPjggxkwYADvvvsu69ev58ADD8TdAdi0aRMHHHAAJSUlnH322cyaNQuAa6+9lkMOOaT871jWfkefv6SkhMsuu4wePXrQs2dP/v73vwPw+uuvc+SRR3LwwQdz3HHH8cUXX1TlH6mIiGQIjUSLVDBmDFTIGXdbXh6EuWvCli1bxj333MNdd90FwPjx42nWrBklJSUMHDiQH/3oR3Tr1m27PkVFRRx55JGMHz+eyy+/nMmTJzN27NjvndvdWbBgAY8++ijXX389s2fP5vbbb6dVq1Y89NBDLF68mD59+nyv3957782QIUNo27YtxxxzDCeeeCLDhw+nVq1aXHLJJfz617/m0EMPZeXKlQwdOpSlS5dy/vnn06JFC8aMGRPX5+7Tpw/33nsvAKNHj2bSpEl06NCBefPmcfHFF/PMM8/QrVs3XnnlFY444ggeeeQRjj/+eGrX3v6ydumll3Ldddfh7px11lnMnj2b4447boef/8477+TTTz9l8eLF5OTksH79er799lsuvfRSHn30UVq0aMG0adP43e9+x8SJE+P6LCIiknkyMokuLoaXX4YuXaBt22RHI7J7OnTowCGHHFK+/cADD3D33XdTUlLCp59+yrJly76XRDdo0KA8UTz44IN5+eWXKz33qaeeWt5m5cqVALzyyitceeWVAPTq1Yvu3btX2nfKlCm8+eabzJkzh/Hjx/Pcc88xadIk5syZs11t9ldffUVxcXHCn7tsxHjDhg3Mnz+f0047rfxYSUkJAMOHD2fGjBkcccQRTJ8+ncsvv/x753nuuef4y1/+wpYtW1i7dm35SPKOPv+cOXMYM2YMOTk5ADRr1ozCwkLeeustBg0aBEBpaSlt2rRJ+DOJiEjmyMgkuqgIhgyBCRPgF79IdjSSbqo6YhyVPfbYo/z1ihUruPXWW1mwYAFNmzbl7LPPrnRa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\n",
      "text/plain": [
       "<Figure size 864x432 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from sklearn import ensemble\n",
    "from sklearn import datasets\n",
    "from sklearn.utils import shuffle\n",
    "from sklearn.metrics import mean_squared_error\n",
    "\n",
    "# #############################################################################\n",
    "# 导入数据\n",
    "boston = datasets.load_boston()\n",
    "X, y = shuffle(boston.data, boston.target, random_state=13)\n",
    "X = X.astype(np.float32)\n",
    "offset = int(X.shape[0] * 0.9)\n",
    "X_train, y_train = X[:offset], y[:offset]\n",
    "X_test, y_test = X[offset:], y[offset:]\n",
    "\n",
    "# #############################################################################\n",
    "# 拟合模型\n",
    "params = {'n_estimators': 500, 'max_depth': 4, 'min_samples_split': 2,\n",
    "          'learning_rate': 0.01, 'loss': 'ls'}\n",
    "clf = ensemble.GradientBoostingRegressor(**params)\n",
    "\n",
    "clf.fit(X_train, y_train)\n",
    "mse = mean_squared_error(y_test, clf.predict(X_test))\n",
    "print(\"MSE: %.4f\" % mse)\n",
    "\n",
    "# #############################################################################\n",
    "# 绘制训练误差图\n",
    "\n",
    "# 计算测试误差\n",
    "test_score = np.zeros((params['n_estimators'],), dtype=np.float64)\n",
    "\n",
    "for i, y_pred in enumerate(clf.staged_predict(X_test)):\n",
    "    test_score[i] = clf.loss_(y_test, y_pred)\n",
    "\n",
    "plt.figure(figsize=(12, 6))\n",
    "plt.subplot(1, 2, 1)\n",
    "plt.title('Deviance')\n",
    "plt.plot(np.arange(params['n_estimators']) + 1, clf.train_score_, 'b-',\n",
    "         label='Training Set Deviance')\n",
    "plt.plot(np.arange(params['n_estimators']) + 1, test_score, 'r-',\n",
    "         label='Test Set Deviance')\n",
    "plt.legend(loc='upper right')\n",
    "plt.xlabel('Boosting Iterations')\n",
    "plt.ylabel('Deviance')\n",
    "\n",
    "# #############################################################################\n",
    "# 绘制特征重要性图\n",
    "feature_importance = clf.feature_importances_\n",
    "feature_importance = 100.0 * (feature_importance / feature_importance.max())\n",
    "sorted_idx = np.argsort(feature_importance)\n",
    "pos = np.arange(sorted_idx.shape[0]) + .5\n",
    "plt.subplot(1, 2, 2)\n",
    "plt.barh(pos, feature_importance[sorted_idx], align='center')\n",
    "plt.yticks(pos, boston.feature_names[sorted_idx])\n",
    "plt.xlabel('Relative Importance')\n",
    "plt.title('Variable Importance')\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0]\ttrain-auc:0.519692\teval-auc:0.496637\n",
      "[1]\ttrain-auc:0.519614\teval-auc:0.501633\n",
      "[2]\ttrain-auc:0.522885\teval-auc:0.505666\n",
      "[3]\ttrain-auc:0.533895\teval-auc:0.497255\n",
      "[4]\ttrain-auc:0.539955\teval-auc:0.502935\n",
      "[5]\ttrain-auc:0.543366\teval-auc:0.501965\n",
      "[6]\ttrain-auc:0.54406\teval-auc:0.503018\n",
      "[7]\ttrain-auc:0.54757\teval-auc:0.502383\n",
      "[8]\ttrain-auc:0.555687\teval-auc:0.492762\n",
      "[9]\ttrain-auc:0.561073\teval-auc:0.491226\n",
      "[10]\ttrain-auc:0.565758\teval-auc:0.493597\n",
      "[11]\ttrain-auc:0.566254\teval-auc:0.493812\n",
      "[12]\ttrain-auc:0.568044\teval-auc:0.492639\n",
      "[13]\ttrain-auc:0.569515\teval-auc:0.49208\n",
      "[14]\ttrain-auc:0.574786\teval-auc:0.492855\n",
      "[15]\ttrain-auc:0.57583\teval-auc:0.49201\n",
      "[16]\ttrain-auc:0.577061\teval-auc:0.490646\n",
      "[17]\ttrain-auc:0.579165\teval-auc:0.490344\n",
      "[18]\ttrain-auc:0.580938\teval-auc:0.489471\n",
      "[19]\ttrain-auc:0.586527\teval-auc:0.494097\n",
      "[20]\ttrain-auc:0.590486\teval-auc:0.492806\n",
      "[21]\ttrain-auc:0.597166\teval-auc:0.491582\n",
      "[22]\ttrain-auc:0.601585\teval-auc:0.486353\n",
      "[23]\ttrain-auc:0.60214\teval-auc:0.485561\n",
      "[24]\ttrain-auc:0.60343\teval-auc:0.485707\n",
      "[25]\ttrain-auc:0.604545\teval-auc:0.486799\n",
      "[26]\ttrain-auc:0.607215\teval-auc:0.487183\n",
      "[27]\ttrain-auc:0.611665\teval-auc:0.491302\n",
      "[28]\ttrain-auc:0.613485\teval-auc:0.491633\n",
      "[29]\ttrain-auc:0.615826\teval-auc:0.492293\n",
      "[30]\ttrain-auc:0.616589\teval-auc:0.494513\n",
      "[31]\ttrain-auc:0.618698\teval-auc:0.496593\n",
      "[32]\ttrain-auc:0.619186\teval-auc:0.496139\n",
      "[33]\ttrain-auc:0.620095\teval-auc:0.495633\n",
      "[34]\ttrain-auc:0.620583\teval-auc:0.496727\n",
      "[35]\ttrain-auc:0.621235\teval-auc:0.496634\n",
      "[36]\ttrain-auc:0.62229\teval-auc:0.49668\n",
      "[37]\ttrain-auc:0.626055\teval-auc:0.497476\n",
      "[38]\ttrain-auc:0.627199\teval-auc:0.496315\n",
      "[39]\ttrain-auc:0.631423\teval-auc:0.500526\n",
      "[40]\ttrain-auc:0.635601\teval-auc:0.499168\n",
      "[41]\ttrain-auc:0.640611\teval-auc:0.501784\n",
      "[42]\ttrain-auc:0.641405\teval-auc:0.501748\n",
      "[43]\ttrain-auc:0.641483\teval-auc:0.501685\n",
      "[44]\ttrain-auc:0.643285\teval-auc:0.501433\n",
      "[45]\ttrain-auc:0.646688\teval-auc:0.500859\n",
      "[46]\ttrain-auc:0.647917\teval-auc:0.501222\n",
      "[47]\ttrain-auc:0.650157\teval-auc:0.500049\n",
      "[48]\ttrain-auc:0.651903\teval-auc:0.498603\n",
      "[49]\ttrain-auc:0.652026\teval-auc:0.498842\n"
     ]
    }
   ],
   "source": [
    "### XGBoost\n",
    "import xgboost as xgb\n",
    "\n",
    "data = np.random.rand(100000, 10) \n",
    "label = np.random.randint(2, size=100000) \n",
    "dtrain = xgb.DMatrix(data, label=label, missing = -999.0)\n",
    "\n",
    "data2 = np.random.rand(5000, 10)\n",
    "label2 = np.random.randint(2, size=5000)\n",
    "dtest = xgb.DMatrix(data2, label=label2, missing = -999.0)\n",
    "\n",
    "params = {'bst:max_depth':2, 'bst:eta':1, 'silent':1, 'objective':'binary:logistic' }\n",
    "params['nthread'] = 4\n",
    "params['eval_metric'] = 'auc'\n",
    "\n",
    "evallist  = [(dtrain,'train'), (dtest,'eval')]\n",
    "\n",
    "num_round = 50\n",
    "bst = xgb.train(params, dtrain, num_round, evallist)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0]\ttrain-auc:0.519692\teval-auc:0.496637\n",
      "Multiple eval metrics have been passed: 'eval-auc' will be used for early stopping.\n",
      "\n",
      "Will train until eval-auc hasn't improved in 10 rounds.\n",
      "[1]\ttrain-auc:0.519614\teval-auc:0.501633\n",
      "[2]\ttrain-auc:0.522885\teval-auc:0.505666\n",
      "[3]\ttrain-auc:0.533895\teval-auc:0.497255\n",
      "[4]\ttrain-auc:0.539955\teval-auc:0.502935\n",
      "[5]\ttrain-auc:0.543366\teval-auc:0.501965\n",
      "[6]\ttrain-auc:0.54406\teval-auc:0.503018\n",
      "[7]\ttrain-auc:0.54757\teval-auc:0.502383\n",
      "[8]\ttrain-auc:0.555687\teval-auc:0.492762\n",
      "[9]\ttrain-auc:0.561073\teval-auc:0.491226\n",
      "[10]\ttrain-auc:0.565758\teval-auc:0.493597\n",
      "[11]\ttrain-auc:0.566254\teval-auc:0.493812\n",
      "[12]\ttrain-auc:0.568044\teval-auc:0.492639\n",
      "Stopping. Best iteration:\n",
      "[2]\ttrain-auc:0.522885\teval-auc:0.505666\n",
      "\n"
     ]
    }
   ],
   "source": [
    "bst = xgb.train(params, dtrain, num_round, evallist, early_stopping_rounds=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Installation\\anaconda\\lib\\site-packages\\lightgbm\\engine.py:102: UserWarning: Found `num_trees` in params. Will use it instead of argument\n",
      "  warnings.warn(\"Found `{}` in params. Will use it instead of argument\".format(alias))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1]\tvalid_0's binary_error: 0.5028\n",
      "[2]\tvalid_0's binary_error: 0.5068\n",
      "[3]\tvalid_0's binary_error: 0.5084\n",
      "[4]\tvalid_0's binary_error: 0.5106\n",
      "[5]\tvalid_0's binary_error: 0.5084\n",
      "[6]\tvalid_0's binary_error: 0.511\n",
      "[7]\tvalid_0's binary_error: 0.5094\n",
      "[8]\tvalid_0's binary_error: 0.5102\n",
      "[9]\tvalid_0's binary_error: 0.5124\n",
      "[10]\tvalid_0's binary_error: 0.511\n",
      "[11]\tvalid_0's binary_error: 0.5088\n",
      "[12]\tvalid_0's binary_error: 0.506\n",
      "[13]\tvalid_0's binary_error: 0.5078\n",
      "[14]\tvalid_0's binary_error: 0.5106\n",
      "[15]\tvalid_0's binary_error: 0.5096\n",
      "[16]\tvalid_0's binary_error: 0.5116\n",
      "[17]\tvalid_0's binary_error: 0.511\n",
      "[18]\tvalid_0's binary_error: 0.5096\n",
      "[19]\tvalid_0's binary_error: 0.5086\n",
      "[20]\tvalid_0's binary_error: 0.5108\n",
      "[21]\tvalid_0's binary_error: 0.5106\n",
      "[22]\tvalid_0's binary_error: 0.51\n",
      "[23]\tvalid_0's binary_error: 0.5078\n",
      "[24]\tvalid_0's binary_error: 0.5088\n",
      "[25]\tvalid_0's binary_error: 0.5076\n",
      "[26]\tvalid_0's binary_error: 0.5068\n",
      "[27]\tvalid_0's binary_error: 0.5064\n",
      "[28]\tvalid_0's binary_error: 0.5068\n",
      "[29]\tvalid_0's binary_error: 0.5058\n",
      "[30]\tvalid_0's binary_error: 0.5066\n",
      "[31]\tvalid_0's binary_error: 0.5074\n",
      "[32]\tvalid_0's binary_error: 0.5072\n",
      "[33]\tvalid_0's binary_error: 0.5056\n",
      "[34]\tvalid_0's binary_error: 0.5056\n",
      "[35]\tvalid_0's binary_error: 0.505\n",
      "[36]\tvalid_0's binary_error: 0.5048\n",
      "[37]\tvalid_0's binary_error: 0.5042\n",
      "[38]\tvalid_0's binary_error: 0.504\n",
      "[39]\tvalid_0's binary_error: 0.504\n",
      "[40]\tvalid_0's binary_error: 0.5072\n",
      "[41]\tvalid_0's binary_error: 0.5076\n",
      "[42]\tvalid_0's binary_error: 0.5076\n",
      "[43]\tvalid_0's binary_error: 0.5064\n",
      "[44]\tvalid_0's binary_error: 0.5048\n",
      "[45]\tvalid_0's binary_error: 0.5044\n",
      "[46]\tvalid_0's binary_error: 0.5048\n",
      "[47]\tvalid_0's binary_error: 0.5058\n",
      "[48]\tvalid_0's binary_error: 0.5042\n",
      "[49]\tvalid_0's binary_error: 0.506\n",
      "[50]\tvalid_0's binary_error: 0.5054\n",
      "[51]\tvalid_0's binary_error: 0.505\n",
      "[52]\tvalid_0's binary_error: 0.5056\n",
      "[53]\tvalid_0's binary_error: 0.5048\n",
      "[54]\tvalid_0's binary_error: 0.5048\n",
      "[55]\tvalid_0's binary_error: 0.5038\n",
      "[56]\tvalid_0's binary_error: 0.5034\n",
      "[57]\tvalid_0's binary_error: 0.5062\n",
      "[58]\tvalid_0's binary_error: 0.5072\n",
      "[59]\tvalid_0's binary_error: 0.5058\n",
      "[60]\tvalid_0's binary_error: 0.505\n",
      "[61]\tvalid_0's binary_error: 0.5056\n",
      "[62]\tvalid_0's binary_error: 0.5054\n",
      "[63]\tvalid_0's binary_error: 0.5066\n",
      "[64]\tvalid_0's binary_error: 0.5064\n",
      "[65]\tvalid_0's binary_error: 0.5048\n",
      "[66]\tvalid_0's binary_error: 0.503\n",
      "[67]\tvalid_0's binary_error: 0.5026\n",
      "[68]\tvalid_0's binary_error: 0.5008\n",
      "[69]\tvalid_0's binary_error: 0.5014\n",
      "[70]\tvalid_0's binary_error: 0.5026\n",
      "[71]\tvalid_0's binary_error: 0.5024\n",
      "[72]\tvalid_0's binary_error: 0.502\n",
      "[73]\tvalid_0's binary_error: 0.5044\n",
      "[74]\tvalid_0's binary_error: 0.5036\n",
      "[75]\tvalid_0's binary_error: 0.5036\n",
      "[76]\tvalid_0's binary_error: 0.5042\n",
      "[77]\tvalid_0's binary_error: 0.5074\n",
      "[78]\tvalid_0's binary_error: 0.5076\n",
      "[79]\tvalid_0's binary_error: 0.5066\n",
      "[80]\tvalid_0's binary_error: 0.506\n",
      "[81]\tvalid_0's binary_error: 0.5062\n",
      "[82]\tvalid_0's binary_error: 0.508\n",
      "[83]\tvalid_0's binary_error: 0.5086\n",
      "[84]\tvalid_0's binary_error: 0.5104\n",
      "[85]\tvalid_0's binary_error: 0.5092\n",
      "[86]\tvalid_0's binary_error: 0.5086\n",
      "[87]\tvalid_0's binary_error: 0.5082\n",
      "[88]\tvalid_0's binary_error: 0.5082\n",
      "[89]\tvalid_0's binary_error: 0.5082\n",
      "[90]\tvalid_0's binary_error: 0.5088\n",
      "[91]\tvalid_0's binary_error: 0.506\n",
      "[92]\tvalid_0's binary_error: 0.5062\n",
      "[93]\tvalid_0's binary_error: 0.5064\n",
      "[94]\tvalid_0's binary_error: 0.5066\n",
      "[95]\tvalid_0's binary_error: 0.507\n",
      "[96]\tvalid_0's binary_error: 0.5066\n",
      "[97]\tvalid_0's binary_error: 0.5072\n",
      "[98]\tvalid_0's binary_error: 0.5066\n",
      "[99]\tvalid_0's binary_error: 0.5056\n",
      "[100]\tvalid_0's binary_error: 0.5072\n"
     ]
    }
   ],
   "source": [
    "### lightGBM\n",
    "import lightgbm as lgb\n",
    "\n",
    "data = np.random.rand(100000, 10)\n",
    "label = np.random.randint(2, size=100000)\n",
    "train_data = lgb.Dataset(data, label=label)\n",
    "\n",
    "data2 = np.random.rand(5000, 10)\n",
    "label2 = np.random.randint(2, size=5000)\n",
    "test_data = lgb.Dataset(data2, label=label2)\n",
    "\n",
    "param = {'num_leaves':31, 'num_trees':100, 'objective':'binary', 'metrics': 'binary_error'}\n",
    "num_round = 10\n",
    "bst = lgb.train(param, train_data, num_round, valid_sets=[test_data])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Installation\\anaconda\\lib\\site-packages\\lightgbm\\engine.py:394: UserWarning: Found `num_trees` in params. Will use it instead of argument\n",
      "  warnings.warn(\"Found `{}` in params. Will use it instead of argument\".format(alias))\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'binary_logloss-mean': [0.6931588877984727,\n",
       "  0.6932236337721773,\n",
       "  0.693255555598364,\n",
       "  0.6932781676667377,\n",
       "  0.6933408205631513,\n",
       "  0.6933522615892176,\n",
       "  0.6933930543884894,\n",
       "  0.6934500406504481,\n",
       "  0.6934827909171393,\n",
       "  0.6934997556240596,\n",
       "  0.6935212126979559,\n",
       "  0.6935439460244961,\n",
       "  0.6935785144680673,\n",
       "  0.6936023206747232,\n",
       "  0.6936197939856257,\n",
       "  0.6936346371639155,\n",
       "  0.693707446638796,\n",
       "  0.6937395551339177,\n",
       "  0.6937718584731615,\n",
       "  0.6938396249257172,\n",
       "  0.6938514419254942,\n",
       "  0.6938602732958487,\n",
       "  0.6939132112804604,\n",
       "  0.6939371423402316,\n",
       "  0.6939561991877541,\n",
       "  0.6939775043862373,\n",
       "  0.6939889214983324,\n",
       "  0.6940038318624712,\n",
       "  0.6940231154028522,\n",
       "  0.6940297144872145,\n",
       "  0.6940591584689865,\n",
       "  0.6940983718306517,\n",
       "  0.6941348127425352,\n",
       "  0.6941783832440872,\n",
       "  0.6942664804104111,\n",
       "  0.6943022585718985,\n",
       "  0.6943156392531057,\n",
       "  0.6943258799241393,\n",
       "  0.6943750508010992,\n",
       "  0.6944328264113544,\n",
       "  0.6944423757436093,\n",
       "  0.6944873477377044,\n",
       "  0.6944907889880525,\n",
       "  0.6945100085385756,\n",
       "  0.6944943227037799,\n",
       "  0.6945228052203674,\n",
       "  0.6945291941210371,\n",
       "  0.6945783922460984,\n",
       "  0.6946130056911343,\n",
       "  0.6946530999305496,\n",
       "  0.6946812720065156,\n",
       "  0.6947124408005644,\n",
       "  0.6947599811406237,\n",
       "  0.6947809241365313,\n",
       "  0.6947957704884903,\n",
       "  0.6948412297067644,\n",
       "  0.6948569687531532,\n",
       "  0.6948848464739446,\n",
       "  0.6949171739412511,\n",
       "  0.6950021675125169,\n",
       "  0.6950467250363808,\n",
       "  0.695056766024074,\n",
       "  0.6951144633099591,\n",
       "  0.695136715296049,\n",
       "  0.6951378603813011,\n",
       "  0.6951638176343,\n",
       "  0.6952140250104517,\n",
       "  0.6952155407852165,\n",
       "  0.6952465134288127,\n",
       "  0.6953044034562588,\n",
       "  0.6953350137145834,\n",
       "  0.6953676967552325,\n",
       "  0.6953919057990845,\n",
       "  0.6954111410791326,\n",
       "  0.6954142276970035,\n",
       "  0.6954371325485484,\n",
       "  0.6954521299673302,\n",
       "  0.6954726941670288,\n",
       "  0.6955422120994235,\n",
       "  0.6955560722547445,\n",
       "  0.6955897702075934,\n",
       "  0.6956120532649919,\n",
       "  0.6955997134405777,\n",
       "  0.6956459775620735,\n",
       "  0.6956674518447075,\n",
       "  0.6956910432258263,\n",
       "  0.6957603192180628,\n",
       "  0.6957727173946163,\n",
       "  0.6958064007796054,\n",
       "  0.6958475920460565,\n",
       "  0.6959131325998592,\n",
       "  0.6959599619164335,\n",
       "  0.6959937223834414,\n",
       "  0.6959723896884659,\n",
       "  0.6959932943038427,\n",
       "  0.6960138713123823,\n",
       "  0.6960438571471907,\n",
       "  0.6960617396930854,\n",
       "  0.6960925367100873,\n",
       "  0.6961465901612882],\n",
       " 'binary_logloss-stdv': [2.518515005592024e-05,\n",
       "  2.6883615855440673e-05,\n",
       "  5.716376418962724e-05,\n",
       "  0.00010091853100827115,\n",
       "  9.529663142517933e-05,\n",
       "  0.00010683271512711486,\n",
       "  0.00011486207755320789,\n",
       "  0.00012288606678254377,\n",
       "  0.00011457177228268595,\n",
       "  0.00012335713115826761,\n",
       "  9.417631721864359e-05,\n",
       "  7.506656267577077e-05,\n",
       "  7.205798490568105e-05,\n",
       "  9.160028461571754e-05,\n",
       "  0.00010106245688253819,\n",
       "  7.774603370343625e-05,\n",
       "  7.42458461922956e-05,\n",
       "  8.761800097140635e-05,\n",
       "  0.00010745978935817071,\n",
       "  0.00011818301629760598,\n",
       "  0.0001336765666332776,\n",
       "  0.00017866757654062612,\n",
       "  0.00020609282101558747,\n",
       "  0.00021562417355753104,\n",
       "  0.00021749970917057357,\n",
       "  0.00024319014934692915,\n",
       "  0.0002704316992997889,\n",
       "  0.000246076207875151,\n",
       "  0.00025675691708374105,\n",
       "  0.0002714988105514553,\n",
       "  0.00022896025521083573,\n",
       "  0.0002608254019938404,\n",
       "  0.00024077581669841903,\n",
       "  0.00020780541711356575,\n",
       "  0.0002317266777534107,\n",
       "  0.0002464437474636629,\n",
       "  0.00021288763485907106,\n",
       "  0.00020180079932203778,\n",
       "  0.00020939515118810606,\n",
       "  0.00022450127149726434,\n",
       "  0.00025531730509897817,\n",
       "  0.0002428014322627764,\n",
       "  0.0002634577925908204,\n",
       "  0.0002515464602215462,\n",
       "  0.00023674745124489756,\n",
       "  0.00021349100919093998,\n",
       "  0.00019569953027279727,\n",
       "  0.00018273301406574203,\n",
       "  0.0001960410724649228,\n",
       "  0.00017729252298018177,\n",
       "  0.00018277107120804093,\n",
       "  0.0001752108546619484,\n",
       "  0.00017697930058439818,\n",
       "  0.00017102690566950362,\n",
       "  0.00018493594581830977,\n",
       "  0.000219717147916725,\n",
       "  0.00020321649913136305,\n",
       "  0.00019064948813497134,\n",
       "  0.0002047875991803903,\n",
       "  0.00020722448313624216,\n",
       "  0.00023328777357917304,\n",
       "  0.00021653370277197837,\n",
       "  0.00024330680963779397,\n",
       "  0.00022724879564634182,\n",
       "  0.00021579347333664978,\n",
       "  0.00022925906776462298,\n",
       "  0.0002418925924320478,\n",
       "  0.00024609286148258855,\n",
       "  0.00021922496837058228,\n",
       "  0.00021144069508068303,\n",
       "  0.0002538036907464988,\n",
       "  0.0002826795872731121,\n",
       "  0.00026832498400611304,\n",
       "  0.00028448102745829996,\n",
       "  0.0002612103576240695,\n",
       "  0.0002558615938836536,\n",
       "  0.0002504450281053094,\n",
       "  0.00025785336516923285,\n",
       "  0.00025656311459762687,\n",
       "  0.0002572207897601339,\n",
       "  0.0002544163578233315,\n",
       "  0.000272529524829161,\n",
       "  0.00027911710622546056,\n",
       "  0.00025153197757737077,\n",
       "  0.00023754227437672686,\n",
       "  0.00026924035440070254,\n",
       "  0.0002614540232402403,\n",
       "  0.0002559088609491011,\n",
       "  0.00022985216336379093,\n",
       "  0.00024315613056497904,\n",
       "  0.00023110554934052576,\n",
       "  0.00025301939558248604,\n",
       "  0.00025234788782941935,\n",
       "  0.00025714725200311,\n",
       "  0.00023984249161820872,\n",
       "  0.0002547535772882539,\n",
       "  0.00023276599458999027,\n",
       "  0.0002094327400020151,\n",
       "  0.00020329159517287022,\n",
       "  0.00020613757102677852]}"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "num_round = 10\n",
    "param = {'num_leaves':50, 'num_trees':100, 'objective':'binary'}\n",
    "lgb.cv(param, train_data, num_round, nfold=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1]\tvalid_0's binary_logloss: 0.693124\n",
      "Training until validation scores don't improve for 10 rounds.\n",
      "[2]\tvalid_0's binary_logloss: 0.693105\n",
      "[3]\tvalid_0's binary_logloss: 0.693048\n",
      "[4]\tvalid_0's binary_logloss: 0.692809\n",
      "[5]\tvalid_0's binary_logloss: 0.692825\n",
      "[6]\tvalid_0's binary_logloss: 0.692786\n",
      "[7]\tvalid_0's binary_logloss: 0.692759\n",
      "[8]\tvalid_0's binary_logloss: 0.692855\n",
      "[9]\tvalid_0's binary_logloss: 0.69284\n",
      "[10]\tvalid_0's binary_logloss: 0.692898\n",
      "[11]\tvalid_0's binary_logloss: 0.692956\n",
      "[12]\tvalid_0's binary_logloss: 0.692815\n",
      "[13]\tvalid_0's binary_logloss: 0.692864\n",
      "[14]\tvalid_0's binary_logloss: 0.693053\n",
      "[15]\tvalid_0's binary_logloss: 0.693167\n",
      "[16]\tvalid_0's binary_logloss: 0.693117\n",
      "[17]\tvalid_0's binary_logloss: 0.693078\n",
      "Early stopping, best iteration is:\n",
      "[7]\tvalid_0's binary_logloss: 0.692759\n",
      "7\n"
     ]
    }
   ],
   "source": [
    "bst = lgb.train(param, train_data, 20, valid_sets=test_data, early_stopping_rounds=10)\n",
    "print(bst.best_iteration)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 招聘数据的建模：GBDT"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1650, 60)"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "df = pd.read_csv('./lagou_featured.csv', encoding='gbk')\n",
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>salary</th>\n",
       "      <th>Python</th>\n",
       "      <th>R</th>\n",
       "      <th>SQL</th>\n",
       "      <th>Excel</th>\n",
       "      <th>Java</th>\n",
       "      <th>Linux</th>\n",
       "      <th>C++</th>\n",
       "      <th>Spark</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>上海</th>\n",
       "      <th>其他</th>\n",
       "      <th>北京</th>\n",
       "      <th>南京</th>\n",
       "      <th>广州</th>\n",
       "      <th>成都</th>\n",
       "      <th>杭州</th>\n",
       "      <th>武汉</th>\n",
       "      <th>深圳</th>\n",
       "      <th>O2O</th>\n",
       "      <th>企业服务</th>\n",
       "      <th>信息安全</th>\n",
       "      <th>其他.1</th>\n",
       "      <th>医疗健康</th>\n",
       "      <th>教育</th>\n",
       "      <th>数据服务</th>\n",
       "      <th>电子商务</th>\n",
       "      <th>硬件</th>\n",
       "      <th>移动互联网</th>\n",
       "      <th>金融</th>\n",
       "      <th>不限</th>\n",
       "      <th>博士</th>\n",
       "      <th>大专</th>\n",
       "      <th>本科</th>\n",
       "      <th>硕士</th>\n",
       "      <th>数据分析师</th>\n",
       "      <th>数据挖掘工程师</th>\n",
       "      <th>机器学习工程师</th>\n",
       "      <th>深度学习工程师</th>\n",
       "      <th>15-50人</th>\n",
       "      <th>150-500人</th>\n",
       "      <th>2000人以上</th>\n",
       "      <th>50-150人</th>\n",
       "      <th>500-2000人</th>\n",
       "      <th>少于15人</th>\n",
       "      <th>A轮</th>\n",
       "      <th>B轮</th>\n",
       "      <th>C轮</th>\n",
       "      <th>D轮及以上</th>\n",
       "      <th>上市公司</th>\n",
       "      <th>不需要融资</th>\n",
       "      <th>天使轮</th>\n",
       "      <th>未融资</th>\n",
       "      <th>1-3年</th>\n",
       "      <th>10年以上</th>\n",
       "      <th>1年以下</th>\n",
       "      <th>3-5年</th>\n",
       "      <th>5-10年</th>\n",
       "      <th>不限.1</th>\n",
       "      <th>应届毕业生</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>15000</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>32500</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>12500</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>11500</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>10000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   salary  Python  R  SQL  Excel  Java  Linux  C++  Spark  Tensorflow  上海  其他  \\\n",
       "0   15000       1  1    1      0     0      0    0      1           0   0   0   \n",
       "1   32500       1  1    1      0     0      0    0      0           0   0   0   \n",
       "2   12500       1  0    1      0     0      0    0      0           0   0   0   \n",
       "3   11500       0  0    1      1     0      0    0      0           0   0   0   \n",
       "4   10000       0  0    0      0     0      0    0      0           0   0   0   \n",
       "\n",
       "   北京  南京  广州  成都  杭州  武汉  深圳  O2O  企业服务  信息安全  其他.1  医疗健康  教育  数据服务  电子商务  \\\n",
       "0   0   0   0   1   0   0   0    1     0     0     0     0   0     0     0   \n",
       "1   1   0   0   0   0   0   0    0     0     0     0     0   0     0     0   \n",
       "2   1   0   0   0   0   0   0    0     0     0     0     0   0     0     0   \n",
       "3   0   0   1   0   0   0   0    0     0     0     0     0   0     0     0   \n",
       "4   1   0   0   0   0   0   0    0     0     0     1     0   0     0     0   \n",
       "\n",
       "   硬件  移动互联网  金融  不限  博士  大专  本科  硕士  数据分析师  数据挖掘工程师  机器学习工程师  深度学习工程师  \\\n",
       "0   0      0   0   0   0   0   1   0      1        0        0        0   \n",
       "1   0      1   0   0   0   0   1   0      1        0        0        0   \n",
       "2   0      1   0   1   0   0   0   0      1        0        0        0   \n",
       "3   0      1   0   0   0   1   0   0      1        0        0        0   \n",
       "4   0      0   0   0   0   0   1   0      1        0        0        0   \n",
       "\n",
       "   15-50人  150-500人  2000人以上  50-150人  500-2000人  少于15人  A轮  B轮  C轮  D轮及以上  \\\n",
       "0       0         0        1        0          0      0   0   0   0      1   \n",
       "1       0         0        1        0          0      0   0   0   1      0   \n",
       "2       0         0        0        0          1      0   0   0   1      0   \n",
       "3       0         0        0        1          0      0   1   0   0      0   \n",
       "4       0         0        1        0          0      0   0   0   0      0   \n",
       "\n",
       "   上市公司  不需要融资  天使轮  未融资  1-3年  10年以上  1年以下  3-5年  5-10年  不限.1  应届毕业生  \n",
       "0     0      0    0    0     1      0     0     0      0     0      0  \n",
       "1     0      0    0    0     0      0     0     0      1     0      0  \n",
       "2     0      0    0    0     1      0     0     0      0     0      0  \n",
       "3     0      0    0    0     1      0     0     0      0     0      0  \n",
       "4     1      0    0    0     1      0     0     0      0     0      0  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.options.display.max_columns = 999\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.hist(df['salary'])\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1650, 59) (1650, 1)\n"
     ]
    }
   ],
   "source": [
    "X = df.drop(['salary'], axis=1).values\n",
    "y = df['salary'].values.reshape((-1, 1))\n",
    "print(X.shape, y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1155, 59) (1155, 1) (495, 59) (495, 1)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)\n",
    "print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Installation\\anaconda\\lib\\site-packages\\sklearn\\utils\\validation.py:578: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
      "  y = column_or_1d(y, warn=True)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GradientBoostingRegressor(alpha=0.9, criterion='friedman_mse', init=None,\n",
       "             learning_rate=0.1, loss='ls', max_depth=5, max_features=None,\n",
       "             max_leaf_nodes=None, min_impurity_decrease=0.0,\n",
       "             min_impurity_split=None, min_samples_leaf=1,\n",
       "             min_samples_split=2, min_weight_fraction_leaf=0.0,\n",
       "             n_estimators=100, presort='auto', random_state=None,\n",
       "             subsample=1.0, verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.ensemble import GradientBoostingRegressor\n",
    "model = GradientBoostingRegressor(n_estimators = 100, max_depth = 5)\n",
    "model.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "8648.714766501464\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import mean_squared_error\n",
    "y_pred = model.predict(X_test)\n",
    "print(np.sqrt(mean_squared_error(y_test, y_pred)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[25297.50618265  6663.32391091 28277.21891716 33079.18172213\n",
      " 15296.22154914 32275.89608055 35078.15056713 12793.41861457\n",
      " 25296.7693544  14796.7485948 ]\n"
     ]
    }
   ],
   "source": [
    "print(y_pred[:10])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[22500 10000 25000 40000 13500 25000 42500  3500 30000 20000]\n"
     ]
    }
   ],
   "source": [
    "print(y_test[:10].flatten())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(y_pred)\n",
    "plt.plot(y_test)\n",
    "plt.legend(['y_pred', 'y_test'])\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Installation\\anaconda\\lib\\site-packages\\sklearn\\utils\\validation.py:578: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n",
      "  y = column_or_1d(y, warn=True)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.42803287201114965\n"
     ]
    }
   ],
   "source": [
    "# 目标变量对数化处理\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, np.log(y), test_size=0.3, random_state=42)\n",
    "model = GradientBoostingRegressor(n_estimators = 100, max_depth = 5)\n",
    "model.fit(X_train, y_train)\n",
    "y_pred = model.predict(X_test)\n",
    "print(np.sqrt(mean_squared_error(y_test, y_pred)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(np.exp(y_pred))\n",
    "plt.plot(np.exp(y_test))\n",
    "plt.legend(['y_pred', 'y_test'])\n",
    "plt.show();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 招聘数据建模：XGBoost"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fold 1 out of 5\n",
      "[0]\ttrain-rmse:0.33306\tvalid-rmse:0.331891\n",
      "Multiple eval metrics have been passed: 'valid-rmse' will be used for early stopping.\n",
      "\n",
      "Will train until valid-rmse hasn't improved in 1000 rounds.\n",
      "[100]\ttrain-rmse:0.123801\tvalid-rmse:0.122953\n",
      "[200]\ttrain-rmse:0.048429\tvalid-rmse:0.047906\n",
      "[300]\ttrain-rmse:0.022679\tvalid-rmse:0.023399\n",
      "[400]\ttrain-rmse:0.015262\tvalid-rmse:0.017538\n",
      "[500]\ttrain-rmse:0.013248\tvalid-rmse:0.016514\n",
      "[600]\ttrain-rmse:0.012385\tvalid-rmse:0.016278\n",
      "[700]\ttrain-rmse:0.011668\tvalid-rmse:0.016141\n",
      "[800]\ttrain-rmse:0.011105\tvalid-rmse:0.016072\n",
      "[900]\ttrain-rmse:0.010508\tvalid-rmse:0.016045\n",
      "[1000]\ttrain-rmse:0.009946\tvalid-rmse:0.016034\n",
      "[1100]\ttrain-rmse:0.009444\tvalid-rmse:0.016018\n",
      "[1200]\ttrain-rmse:0.008941\tvalid-rmse:0.015965\n",
      "[1300]\ttrain-rmse:0.008467\tvalid-rmse:0.015955\n",
      "[1400]\ttrain-rmse:0.008074\tvalid-rmse:0.015952\n",
      "[1500]\ttrain-rmse:0.00766\tvalid-rmse:0.015982\n",
      "[1600]\ttrain-rmse:0.007329\tvalid-rmse:0.015999\n",
      "[1700]\ttrain-rmse:0.006996\tvalid-rmse:0.01601\n",
      "[1800]\ttrain-rmse:0.00671\tvalid-rmse:0.016027\n",
      "[1900]\ttrain-rmse:0.006431\tvalid-rmse:0.016048\n",
      "[1999]\ttrain-rmse:0.006165\tvalid-rmse:0.016077\n",
      "Fold 2 out of 5\n",
      "[0]\ttrain-rmse:0.333054\tvalid-rmse:0.331892\n",
      "Multiple eval metrics have been passed: 'valid-rmse' will be used for early stopping.\n",
      "\n",
      "Will train until valid-rmse hasn't improved in 1000 rounds.\n",
      "[100]\ttrain-rmse:0.123781\tvalid-rmse:0.122921\n",
      "[200]\ttrain-rmse:0.04833\tvalid-rmse:0.048388\n",
      "[300]\ttrain-rmse:0.022486\tvalid-rmse:0.024579\n",
      "[400]\ttrain-rmse:0.014937\tvalid-rmse:0.018959\n",
      "[500]\ttrain-rmse:0.012796\tvalid-rmse:0.01799\n",
      "[600]\ttrain-rmse:0.011832\tvalid-rmse:0.017761\n",
      "[700]\ttrain-rmse:0.011143\tvalid-rmse:0.017666\n",
      "[800]\ttrain-rmse:0.010577\tvalid-rmse:0.017583\n",
      "[900]\ttrain-rmse:0.01002\tvalid-rmse:0.017578\n",
      "[1000]\ttrain-rmse:0.009464\tvalid-rmse:0.017567\n",
      "[1100]\ttrain-rmse:0.008973\tvalid-rmse:0.017573\n",
      "[1200]\ttrain-rmse:0.008511\tvalid-rmse:0.017533\n",
      "[1300]\ttrain-rmse:0.008094\tvalid-rmse:0.017558\n",
      "[1400]\ttrain-rmse:0.007692\tvalid-rmse:0.017593\n",
      "[1500]\ttrain-rmse:0.00734\tvalid-rmse:0.017602\n",
      "[1600]\ttrain-rmse:0.006998\tvalid-rmse:0.017616\n",
      "[1700]\ttrain-rmse:0.006699\tvalid-rmse:0.017634\n",
      "[1800]\ttrain-rmse:0.006431\tvalid-rmse:0.017649\n",
      "[1900]\ttrain-rmse:0.006175\tvalid-rmse:0.01767\n",
      "[1999]\ttrain-rmse:0.005947\tvalid-rmse:0.017685\n",
      "Fold 3 out of 5\n",
      "[0]\ttrain-rmse:0.3332\tvalid-rmse:0.331293\n",
      "Multiple eval metrics have been passed: 'valid-rmse' will be used for early stopping.\n",
      "\n",
      "Will train until valid-rmse hasn't improved in 1000 rounds.\n",
      "[100]\ttrain-rmse:0.123861\tvalid-rmse:0.122517\n",
      "[200]\ttrain-rmse:0.048373\tvalid-rmse:0.048126\n",
      "[300]\ttrain-rmse:0.022538\tvalid-rmse:0.024518\n",
      "[400]\ttrain-rmse:0.015041\tvalid-rmse:0.019007\n",
      "[500]\ttrain-rmse:0.013027\tvalid-rmse:0.017962\n",
      "[600]\ttrain-rmse:0.012218\tvalid-rmse:0.017705\n",
      "[700]\ttrain-rmse:0.011589\tvalid-rmse:0.017572\n",
      "[800]\ttrain-rmse:0.011017\tvalid-rmse:0.017488\n",
      "[900]\ttrain-rmse:0.010478\tvalid-rmse:0.017429\n",
      "[1000]\ttrain-rmse:0.009962\tvalid-rmse:0.017398\n",
      "[1100]\ttrain-rmse:0.009473\tvalid-rmse:0.017389\n",
      "[1200]\ttrain-rmse:0.009021\tvalid-rmse:0.017407\n",
      "[1300]\ttrain-rmse:0.008564\tvalid-rmse:0.01738\n",
      "[1400]\ttrain-rmse:0.008107\tvalid-rmse:0.017453\n",
      "[1500]\ttrain-rmse:0.007716\tvalid-rmse:0.01751\n",
      "[1600]\ttrain-rmse:0.007366\tvalid-rmse:0.017524\n",
      "[1700]\ttrain-rmse:0.007038\tvalid-rmse:0.017577\n",
      "[1800]\ttrain-rmse:0.006747\tvalid-rmse:0.01762\n",
      "[1900]\ttrain-rmse:0.006463\tvalid-rmse:0.017656\n",
      "[1999]\ttrain-rmse:0.00621\tvalid-rmse:0.017681\n",
      "Fold 4 out of 5\n",
      "[0]\ttrain-rmse:0.332278\tvalid-rmse:0.335004\n",
      "Multiple eval metrics have been passed: 'valid-rmse' will be used for early stopping.\n",
      "\n",
      "Will train until valid-rmse hasn't improved in 1000 rounds.\n",
      "[100]\ttrain-rmse:0.123496\tvalid-rmse:0.125373\n",
      "[200]\ttrain-rmse:0.04828\tvalid-rmse:0.050471\n",
      "[300]\ttrain-rmse:0.022633\tvalid-rmse:0.02646\n",
      "[400]\ttrain-rmse:0.015129\tvalid-rmse:0.020626\n",
      "[500]\ttrain-rmse:0.013123\tvalid-rmse:0.019473\n",
      "[600]\ttrain-rmse:0.012111\tvalid-rmse:0.01922\n",
      "[700]\ttrain-rmse:0.011387\tvalid-rmse:0.019143\n",
      "[800]\ttrain-rmse:0.010835\tvalid-rmse:0.019108\n",
      "[900]\ttrain-rmse:0.010264\tvalid-rmse:0.019091\n",
      "[1000]\ttrain-rmse:0.009751\tvalid-rmse:0.019083\n",
      "[1100]\ttrain-rmse:0.009241\tvalid-rmse:0.019066\n",
      "[1200]\ttrain-rmse:0.008762\tvalid-rmse:0.019096\n",
      "[1300]\ttrain-rmse:0.008298\tvalid-rmse:0.019128\n",
      "[1400]\ttrain-rmse:0.00785\tvalid-rmse:0.019159\n",
      "[1500]\ttrain-rmse:0.007463\tvalid-rmse:0.019204\n",
      "[1600]\ttrain-rmse:0.007102\tvalid-rmse:0.019224\n",
      "[1700]\ttrain-rmse:0.006768\tvalid-rmse:0.019289\n",
      "[1800]\ttrain-rmse:0.006462\tvalid-rmse:0.019321\n",
      "[1900]\ttrain-rmse:0.006175\tvalid-rmse:0.019345\n",
      "[1999]\ttrain-rmse:0.005929\tvalid-rmse:0.019371\n",
      "Fold 5 out of 5\n",
      "[0]\ttrain-rmse:0.332528\tvalid-rmse:0.334015\n",
      "Multiple eval metrics have been passed: 'valid-rmse' will be used for early stopping.\n",
      "\n",
      "Will train until valid-rmse hasn't improved in 1000 rounds.\n",
      "[100]\ttrain-rmse:0.123627\tvalid-rmse:0.125205\n",
      "[200]\ttrain-rmse:0.048266\tvalid-rmse:0.050478\n",
      "[300]\ttrain-rmse:0.022459\tvalid-rmse:0.025812\n",
      "[400]\ttrain-rmse:0.014984\tvalid-rmse:0.019349\n",
      "[500]\ttrain-rmse:0.012888\tvalid-rmse:0.017977\n",
      "[600]\ttrain-rmse:0.011971\tvalid-rmse:0.017668\n",
      "[700]\ttrain-rmse:0.011257\tvalid-rmse:0.017635\n",
      "[800]\ttrain-rmse:0.010674\tvalid-rmse:0.017651\n",
      "[900]\ttrain-rmse:0.010119\tvalid-rmse:0.017668\n",
      "[1000]\ttrain-rmse:0.00961\tvalid-rmse:0.01767\n",
      "[1100]\ttrain-rmse:0.0091\tvalid-rmse:0.017696\n",
      "[1200]\ttrain-rmse:0.008653\tvalid-rmse:0.017712\n",
      "[1300]\ttrain-rmse:0.008234\tvalid-rmse:0.017735\n",
      "[1400]\ttrain-rmse:0.007845\tvalid-rmse:0.017774\n",
      "[1500]\ttrain-rmse:0.007475\tvalid-rmse:0.017833\n",
      "[1600]\ttrain-rmse:0.007145\tvalid-rmse:0.017878\n",
      "Stopping. Best iteration:\n",
      "[682]\ttrain-rmse:0.011366\tvalid-rmse:0.017624\n",
      "\n",
      "cv training time 43.72867012023926 seconds\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import KFold\n",
    "import xgboost as xgb\n",
    "from sklearn.metrics import mean_squared_error\n",
    "import time\n",
    "\n",
    "\n",
    "kf = KFold(n_splits=5, random_state=123, shuffle=True)\n",
    "\n",
    "def evalerror(preds, dtrain):\n",
    "    labels = dtrain.get_label()\n",
    "    return 'mse', mean_squared_error(np.exp(preds), np.exp(labels))\n",
    "\n",
    "\n",
    "y = np.log(y)\n",
    "valid_preds = np.zeros((330, 5))\n",
    "\n",
    "time_start = time.time()\n",
    "\n",
    "\n",
    "for i, (train_ind, valid_ind) in enumerate(kf.split(X)):\n",
    "    print('Fold', i+1, 'out of', 5)\n",
    "    X_train, y_train = X[train_ind], y[train_ind]\n",
    "    X_valid, y_valid = X[valid_ind], y[valid_ind]\n",
    "    xgb_params = {\n",
    "        'eta': 0.01, \n",
    "        'max_depth': 6, \n",
    "        'subsample': 0.9, \n",
    "        'colsample_bytree': 0.9, \n",
    "        'objective': 'reg:linear', \n",
    "        'eval_metric': 'rmse', \n",
    "        'seed': 99, \n",
    "        'silent': True\n",
    "    }\n",
    "\n",
    "    d_train = xgb.DMatrix(X_train, y_train)\n",
    "    d_valid = xgb.DMatrix(X_valid, y_valid)\n",
    "    \n",
    "    watchlist = [(d_train, 'train'), (d_valid, 'valid')]\n",
    "    model = xgb.train(\n",
    "        xgb_params, \n",
    "        d_train, \n",
    "        2000,\n",
    "        watchlist,\n",
    "        verbose_eval=100,\n",
    "#         feval=evalerror,\n",
    "        early_stopping_rounds=1000\n",
    "    )\n",
    "#     valid_preds[:, i] = np.exp(model.predict(d_valid))\n",
    "\n",
    "# valid_pred = valid_preds.means(axis=1)\n",
    "# print('outline score：{}'.format(np.sqrt(mean_squared_error(y_pred, valid_pred)*0.5)))\n",
    "print('cv training time {} seconds'.format(time.time() - time_start))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0]\ttrain-rmse:28429.8+141.811\ttest-rmse:28424.7+575.344\n",
      "[100]\ttrain-rmse:12967.1+103.507\ttest-rmse:13270.6+604.932\n",
      "[200]\ttrain-rmse:8312.03+104.557\ttest-rmse:9196.94+634.98\n",
      "[300]\ttrain-rmse:6968.22+121.968\ttest-rmse:8373.57+614.418\n",
      "[400]\ttrain-rmse:6443.75+120.706\ttest-rmse:8201.42+588.542\n",
      "[500]\ttrain-rmse:6106.24+116.675\ttest-rmse:8133.39+577.79\n",
      "[600]\ttrain-rmse:5805.98+120.111\ttest-rmse:8097.86+564.713\n",
      "[700]\ttrain-rmse:5523.39+118.269\ttest-rmse:8085.47+555.602\n",
      "[800]\ttrain-rmse:5263.15+115.646\ttest-rmse:8080.68+546.317\n",
      "[900]\ttrain-rmse:5006.17+114.78\ttest-rmse:8084.34+534.517\n",
      "[999]\ttrain-rmse:4766.63+102.198\ttest-rmse:8091.02+524.252\n"
     ]
    }
   ],
   "source": [
    "import xgboost as xgb\n",
    "xg_train = xgb.DMatrix(X, y)\n",
    "\n",
    "params = {\n",
    "        'eta': 0.01, \n",
    "        'max_depth': 6, \n",
    "        'subsample': 0.9, \n",
    "        'colsample_bytree': 0.9, \n",
    "        'objective': 'reg:linear', \n",
    "        'eval_metric': 'rmse', \n",
    "        'seed': 99, \n",
    "        'silent': True\n",
    "    }\n",
    "cv = xgb.cv(params, xg_train, 1000, nfold=5, early_stopping_rounds=800, verbose_eval=100)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 招聘数据建模：lightGBM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'> <class 'numpy.ndarray'>\n"
     ]
    }
   ],
   "source": [
    "X = df.drop(['salary'], axis=1).values\n",
    "y = np.log(df['salary'].values.reshape((-1, 1))).ravel()\n",
    "print(type(X), type(y))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "begin cv 5-fold training...\n",
      "Fold 1 out of 5\n",
      "Training until validation scores don't improve for 1000 rounds.\n",
      "[200]\tvalid_0's l2: 0.187053\n",
      "[400]\tvalid_0's l2: 0.168876\n",
      "[600]\tvalid_0's l2: 0.163493\n",
      "[800]\tvalid_0's l2: 0.159567\n",
      "[1000]\tvalid_0's l2: 0.156541\n",
      "[1200]\tvalid_0's l2: 0.154333\n",
      "[1400]\tvalid_0's l2: 0.152615\n",
      "[1600]\tvalid_0's l2: 0.151386\n",
      "[1800]\tvalid_0's l2: 0.150502\n",
      "[2000]\tvalid_0's l2: 0.150052\n",
      "Did not meet early stopping. Best iteration is:\n",
      "[2000]\tvalid_0's l2: 0.150052\n",
      "Fold 2 out of 5\n",
      "Training until validation scores don't improve for 1000 rounds.\n",
      "[200]\tvalid_0's l2: 0.215835\n",
      "[400]\tvalid_0's l2: 0.193448\n",
      "[600]\tvalid_0's l2: 0.183787\n",
      "[800]\tvalid_0's l2: 0.17847\n",
      "[1000]\tvalid_0's l2: 0.176257\n",
      "[1200]\tvalid_0's l2: 0.17524\n",
      "[1400]\tvalid_0's l2: 0.175028\n",
      "[1600]\tvalid_0's l2: 0.17538\n",
      "[1800]\tvalid_0's l2: 0.175021\n",
      "[2000]\tvalid_0's l2: 0.174812\n",
      "Did not meet early stopping. Best iteration is:\n",
      "[1980]\tvalid_0's l2: 0.174742\n",
      "Fold 3 out of 5\n",
      "Training until validation scores don't improve for 1000 rounds.\n",
      "[200]\tvalid_0's l2: 0.241614\n",
      "[400]\tvalid_0's l2: 0.227725\n",
      "[600]\tvalid_0's l2: 0.221405\n",
      "[800]\tvalid_0's l2: 0.217776\n",
      "[1000]\tvalid_0's l2: 0.215626\n",
      "[1200]\tvalid_0's l2: 0.214789\n",
      "[1400]\tvalid_0's l2: 0.214369\n",
      "[1600]\tvalid_0's l2: 0.213602\n",
      "[1800]\tvalid_0's l2: 0.213375\n",
      "[2000]\tvalid_0's l2: 0.213225\n",
      "Did not meet early stopping. Best iteration is:\n",
      "[2000]\tvalid_0's l2: 0.213225\n",
      "Fold 4 out of 5\n",
      "Training until validation scores don't improve for 1000 rounds.\n",
      "[200]\tvalid_0's l2: 0.179245\n",
      "[400]\tvalid_0's l2: 0.161027\n",
      "[600]\tvalid_0's l2: 0.155393\n",
      "[800]\tvalid_0's l2: 0.151949\n",
      "[1000]\tvalid_0's l2: 0.149745\n",
      "[1200]\tvalid_0's l2: 0.1482\n",
      "[1400]\tvalid_0's l2: 0.146711\n",
      "[1600]\tvalid_0's l2: 0.146226\n",
      "[1800]\tvalid_0's l2: 0.14604\n",
      "[2000]\tvalid_0's l2: 0.145825\n",
      "Did not meet early stopping. Best iteration is:\n",
      "[1999]\tvalid_0's l2: 0.145815\n",
      "Fold 5 out of 5\n",
      "Training until validation scores don't improve for 1000 rounds.\n",
      "[200]\tvalid_0's l2: 0.192271\n",
      "[400]\tvalid_0's l2: 0.167746\n",
      "[600]\tvalid_0's l2: 0.157526\n",
      "[800]\tvalid_0's l2: 0.151366\n",
      "[1000]\tvalid_0's l2: 0.147443\n",
      "[1200]\tvalid_0's l2: 0.144963\n",
      "[1400]\tvalid_0's l2: 0.143564\n",
      "[1600]\tvalid_0's l2: 0.142231\n",
      "[1800]\tvalid_0's l2: 0.141538\n",
      "[2000]\tvalid_0's l2: 0.141212\n",
      "Did not meet early stopping. Best iteration is:\n",
      "[1983]\tvalid_0's l2: 0.141169\n",
      "cv training time 4696.695798635483 seconds\n"
     ]
    }
   ],
   "source": [
    "import lightgbm as lgb\n",
    "from sklearn.model_selection import KFold\n",
    "from sklearn.metrics import mean_squared_error\n",
    "\n",
    "def evalerror(preds, dtrain):\n",
    "    labels = dtrain.get_label()\n",
    "    return 'mse', mean_squared_error(np.exp(preds), np.exp(labels))\n",
    "\n",
    "params = {\n",
    "    'learning_rate': 0.01,\n",
    "    'boosting_type': 'gbdt',\n",
    "    'objective': 'regression',\n",
    "    'metric': 'mse',\n",
    "    'sub_feature': 0.7,\n",
    "    'num_leaves': 17,\n",
    "    'colsample_bytree': 0.7,\n",
    "    'feature_fraction': 0.7,\n",
    "    'min_data': 100,\n",
    "    'min_hessian': 1,\n",
    "    'verbose': -1,\n",
    "}\n",
    "\n",
    "print('begin cv 5-fold training...')\n",
    "scores = []\n",
    "start_time = time.time()\n",
    "\n",
    "kf = KFold(n_splits=5, shuffle=True, random_state=27)\n",
    "for i, (train_index, valid_index) in enumerate(kf.split(X)):\n",
    "    print('Fold', i+1, 'out of', 5)\n",
    "    X_train, y_train = X[train_index], y[train_index]\n",
    "    X_valid, y_valid = X[valid_index], y[valid_index]\n",
    "    lgb_train = lgb.Dataset(X_train, y_train)\n",
    "    lgb_valid = lgb.Dataset(X_valid, y_valid)\n",
    "    model = lgb.train(params,\n",
    "                lgb_train,\n",
    "                num_boost_round=2000,\n",
    "                valid_sets=lgb_valid,\n",
    "                verbose_eval=200,\n",
    "#                feval=evalerror,\n",
    "               early_stopping_rounds=1000)\n",
    "#     feat_importance = pd.Series(model.feature_importance(), index=X.columns).sort_values(ascending=False)\n",
    "#     test_preds[:, i] = model.predict(lgb_valid)\n",
    "# print('outline score：{}'.format(np.sqrt(mean_squared_error(y_pred, valid_pred)*0.5)))\n",
    "print('cv training time {} seconds'.format(time.time() - time_start))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
